package persistencia;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import modelo.*;


public class AdministradorPersistenciaProveedores
{
	private static AdministradorPersistenciaProveedores instancia;
	
	private AdministradorPersistenciaProveedores()
	{
	}
	public static AdministradorPersistenciaProveedores getInstancia()
	{
		if (instancia== null)
			instancia = new AdministradorPersistenciaProveedores();
		return instancia;
	}
	
	public void insert(Proveedor Prov)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "insert into parcialMieM.dbo.Proveedores (cuit, nombre) values (?,?)" ;
			PreparedStatement ps = con.prepareStatement(senten);
			ps.setString(1, Prov.getCuit());
			ps.setString(2, Prov.getNombre());
			
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch(Exception e) 
	      {
				System.out.println("Error al insertar proveedor");
	      }
	      
	}
		public Proveedor buscarProveedor(String cuit)
	{
		Proveedor prov = null;
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "select cuit, nombre from parcialMieM.dbo.Proveedores where cuit = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,cuit);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{
				if (result.getString("cuit").equals(cuit))
					prov = new Proveedor(result.getString("cuit"), result.getString("nombre"));
				
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return prov;
		}
	      catch(Exception e) 
	      {
				System.out.println("Error al buscar proveedor");
	      }
	      return prov;
	}
		public String listarProductosDeProv(String cuit){
			try {				

				String x = new String();
			Connection con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement nombre = con.prepareStatement("select * from parcialMieM.dbo.productos where cuitProv = ?");
			nombre.setString(1, cuit);
			ResultSet rs = nombre.executeQuery(); //esta guardado en rs el query de sql
			while (rs.next()){
				x += "CUIT Proveedor: " + rs.getString(1) +"."+ " Codigo Producto: " + rs.getInt(2) +"."+ " Descripcion: " + rs.getString(3) +"."+ "\n";
			}
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return x;
			}
			catch (Exception e){
				return "Error al listar productos del proveedor";
			}
			
		}
		public String listarCantProdProve(String cuit){
			try{
				Connection con = PoolConnection.getPoolConnection().getConnection();
				PreparedStatement nom = con.prepareStatement("select count(*) from parcialMieM.dbo.productos where cuitprov = ? group by cuitProv");
				nom.setString(1, cuit);
				ResultSet rs = nom.executeQuery();
				String c = new String();
				while (rs.next()){
					c = "CUIT: " + cuit +" ."+ "Cantidad de Productos: " + rs.getInt(1)+".";
				}
				PoolConnection.getPoolConnection().realeaseConnection(con);
				return c;
			}
			catch (Exception e){
				return "error al listar cantidad de productos del proveedor";
			}
		}
}